package com.linkai.JVM;

/**
 * @Description: 双亲委派机制，类加载器
 *                参考：https://blog.csdn.net/codeyanbao/article/details/82875064
 * @Author: 林凯
 * @Date: 2021/10/20 14:20
 */
public class Student {
    // 双亲委派机制：安全，不让程序员去重写一些JDK里面的类，制造一些Bug
    // ROOT(Bootstrap classLoader) -> EXT -> APP(一层一层检测，如果都不能加载，这最终执行当前应用加载器)
    // 启动类加载器（Bootstrap classLoader），扩展类加载器(Extension ClassLoader)，应用程序类加载器（Application ClassLoader）
    // rt.jar    ext（扩展的一些类）

    /*
        1. 类加载器收到类加载的请求
        2. 将这个请求向上委托给父类加载器去完成，一直向上委托，直到启动类加载器
        3. 启动类加载器检查是否能够加载当前这个类，能加载就结束；否则，抛出异常，通知子加载器进行加载
        4. 重复步骤3
        Class Not Found
        例如重写jdk里面的String类，最终会被委托到 Bootstrap ClassLoader里去加载，之后加载jdk里面的，而不会加载程序员自己写的

        null java调用不到 C、C++
    * */

    public String toString() {
        return "hello";
    }

    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(student.getClass().getClassLoader());    // AppClassLoader
        System.out.println(student.toString());
    }
}
